{"componentChunkName":"component---gatsby-theme-mdx-deck-src-templates-deck-js","path":"/","matchPath":"/*","result":{"data":{"deck":{"id":"85973ca2-64e7-5e54-acc6-f8d12d516372","body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/* @jsx mdx */\nvar theme = {\n  fonts: {\n    body: 'system-ui, sans-serif',\n    monospace: \"'Fira Code', 'Hack', monospace\"\n  },\n  components: {\n    pre: function pre(props) {\n      return props.children;\n    },\n    code: Prism\n  },\n  styles: {\n    pre: _objectSpread({}, prismNightOwl, {\n      margin: 0,\n      textAlign: 'left'\n    }),\n    li: {\n      margin: '0.25em 0',\n      listStylePosition: 'inside',\n      textAlign: 'left',\n      code: {\n        bg: 'rgba(27,31,35,.04)',\n        fontSize: '0.875em',\n        borderRadius: '5px'\n      }\n    }\n  }\n};\nvar _frontmatter = {};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar layoutProps = {\n  theme: theme,\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Head, {\n    mdxType: \"Head\"\n  }, mdx(\"title\", null, \"maybe-ts\"), mdx(\"link\", {\n    rel: \"shortcut icon\",\n    href: \"https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/160/openmoji/213/black-question-mark-ornament_2753.png\"\n  }), mdx(\"meta\", {\n    name: \"twitter:card\",\n    content: \"summary_large_image\"\n  }), mdx(\"meta\", {\n    name: \"twitter:site\",\n    content: \"@hasparus\"\n  }), mdx(\"meta\", {\n    name: \"twitter:title\",\n    content: \"maybe-ts\"\n  }), mdx(\"meta\", {\n    name: \"twitter:description\",\n    content: \"A lightweight Maybe type for fp-ts\"\n  }), mdx(\"meta\", {\n    name: \"twitter:image\",\n    content: \"https://images.unsplash.com/photo-1518644730709-0835105d9daa?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1200\"\n  })), mdx(\"h1\", null, \"maybe-ts\"), mdx(\"hr\", null), mdx(\"h1\", null, \"wtf am i here?\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://twitter.com/hasparus\"\n  }), \"https://twitter.com/hasparus\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"fp-ts\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Option\"), \" isn't cool, it ain't better than null\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"write your own fp-ts typeclass instances\")), mdx(\"hr\", null), mdx(\"h1\", null, \"problems with fp-ts Option\"), mdx(\"hr\", null), mdx(\"h1\", null, \"wtf is Option?\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-tsx\"\n  }), \"interface None {\\n  readonly _tag: 'None'\\n}\\ninterface Some<A> {\\n  readonly _tag: 'Some'\\n  readonly value: A\\n}\\ntype Option<A> = None | Some<A>\\n\")), mdx(\"hr\", null), mdx(Split, {\n    mdxType: \"Split\"\n  }, mdx(\"div\", {\n    style: {\n      fontSize: '0.625em'\n    }\n  }, mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-tsx\"\n  }), \"interface None {\\n  readonly _tag: 'None'\\n}\\ninterface Some<A> {\\n  readonly _tag: 'Some'\\n  readonly value: A\\n}\\ntype Option<A> = None | Some<A>\\n\"))), mdx(\"h2\", {\n    style: {\n      whiteSpace: 'pre',\n      marginLeft: '1em'\n    }\n  }, \"small problems\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"None is truthy\"))), mdx(\"hr\", null), mdx(Split, {\n    mdxType: \"Split\"\n  }, mdx(\"div\", {\n    style: {\n      fontSize: '0.625em'\n    }\n  }, mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-tsx\"\n  }), \"interface None {\\n  readonly _tag: 'None'\\n}\\ninterface Some<A> {\\n  readonly _tag: 'Some'\\n  readonly value: A\\n}\\ntype Option<A> = None | Some<A>\\n\"))), mdx(\"h2\", {\n    style: {\n      whiteSpace: 'pre',\n      marginLeft: '1em'\n    }\n  }, \"small problems\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"None is truthy\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can't use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"??\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".?\")))), mdx(\"hr\", null), mdx(\"h1\", null, \"big problems\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"relaxing a requirement should be a compatible change\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"strengthening a promise should be a compatible change\")), mdx(\"hr\", null), mdx(Image, {\n    src: argOptionalPng,\n    style: {\n      backgroundSize: 'contain'\n    },\n    mdxType: \"Image\"\n  }), mdx(\"hr\", null), mdx(Image, {\n    src: strongerReturnPng,\n    style: {\n      backgroundSize: 'contain'\n    },\n    mdxType: \"Image\"\n  }), mdx(\"hr\", null), mdx(\"h1\", null, \"implementing typeclass instance\"), mdx(\"hr\", null), mdx(CodeSurfer, {\n    theme: codeSurferNightOwl,\n    mdxType: \"CodeSurfer\"\n  }, mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"type Maybe<T> = T | null | undefined;\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"type Nothing = null | undefined;\\nconst Nothing = null as Nothing;\\n\\ntype Maybe<T> = T | null | undefined;\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"type Nothing = null | undefined;\\nconst Nothing = null as Nothing;\\n\\ntype Maybe<T> = T | Nothing;\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"type Nothing = null | undefined;\\nconst Nothing = null as Nothing;\\n\\nconst just = identity;\\n\\ntype Maybe<T> = T | Nothing;\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"export const isNothing = (x: Maybe<unknown>): x is Nothing => x == null;\\n\\nexport const isDefined = <T>(x: Maybe<T>): x is T => x != null;\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"declare module \\\"fp-ts/lib/HKT\\\" {\\n  export interface URItoKind<A> {\\n    Maybe: Maybe<A>;\\n  }\\n}\\n\\nconst URI = \\\"Maybe\\\";\\ntype URI = \\\"Maybe\\\";\\n\\nexport const maybe = {\\n  URI,\\n}\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"// fp-ts\\ninterface Functor1<F extends URIS> {\\n    readonly URI: F;\\n    readonly map: <A, B>(fa: Kind<F, A>, f: (a: A) => B) => Kind<F, B>;\\n}\\n\\n// index.ts\\n\\nexport const map: Functor1<URI>[\\\"map\\\"] = (fa, f) => (fa == null ? null : f(fa));\\n\\nexport const maybe: Functor1<URI> = {\\n  URI,\\n  map,\\n}\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"// fp-ts\\ninterface Apply1<F extends URIS> extends Functor1<F> {\\n    readonly ap: <A, B>(fab: Kind<F, (a: A) => B>, fa: Kind<F, A>) => Kind<F, B>;\\n}\\n\\n// index.ts\\n\\nexport const ap: Apply1<URI>[\\\"ap\\\"] = (fab, fa) =>\\n  fa == null ? null : fab?.(fa);\\n\\nexport const maybe: Apply1<URI> = {\\n  URI,\\n  map,\\n  ap,\\n}\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"// fp-ts\\ninterface Applicative1<F extends URIS> extends Apply1<F> {\\n    readonly of: <A>(a: A) => Kind<F, A>;\\n}\\n\\n// index.ts\\n\\nexport const of: Applicative1<URI>[\\\"of\\\"] = identity;\\n\\nexport const maybe: Applicative1<URI> = {\\n  URI,\\n  map,\\n  ap,\\n  of,\\n}\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"// fp-ts\\ninterface Chain1<F extends URIS> extends Apply1<F> {\\n    readonly chain: <A, B>(fa: Kind<F, A>, f: (a: A) => Kind<F, B>) => Kind<F, B>;\\n}\\ninterface Monad1<F extends URIS> extends Applicative1<F>, Chain1<F> {}\\n\\n// index.ts\\n\\nexport const chain: Chain1<URI>[\\\"chain\\\"] = map;\\n\\nexport const maybe: Monad1<URI> = {\\n  URI,\\n  map,\\n  ap,\\n  of,\\n  chain,\\n}\\n\")), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-ts\"\n  }), \"export const maybe: Monad1<URI> &\\n  Foldable1<URI> &\\n  Traversable1<URI> &\\n  Alternative1<URI> &\\n  Extend1<URI> &\\n  Compactable1<URI> &\\n  Filterable1<URI> = {\\n  URI,\\n  map,\\n  ap,\\n  of,\\n  chain,\\n  foldMap,\\n  reduce,\\n  reduceRight,\\n  sequence,\\n  traverse,\\n  zero,\\n  alt,\\n  extend,\\n  compact,\\n  separate,\\n  filter,\\n  filterMap,\\n  partition,\\n  partitionMap\\n};\\n\"))), mdx(\"hr\", null), mdx(\"div\", {\n    className: \"list-style-none\"\n  }, mdx(\"style\", null, \".list-style-none li { list-style: none } \"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2714 optional chaining (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".?\"), \") and nullish coalescing (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"??\"), \") just works\", \"\\u2122\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2714 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Nothing\"), \" is properly empty value \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"(Nothing == null) === true\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2714 relaxing a requirement is a compatible change\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2714 strengthening a promise is a compatible change\"))), mdx(\"hr\", null), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {}), \"npm install @hasparus/maybe-ts\\n\\nyarn add @hasparus/maybe-ts\\n\")), mdx(\"hr\", null), mdx(\"h1\", null, \"Thank You!\"), mdx(\"img\", {\n    style: {\n      width: 800,\n      maxWidth: '100%'\n    },\n    alt: \"a wrestler in pink underwear bowing down and smiling\",\n    src: \"https://media0.giphy.com/media/6O7ybdmHHJfoc/giphy.gif?cid=790b76113b02e0e874f07d20b4ebf97411eb599b30a29342&rid=giphy.gif\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{"matchPath":"/*","isCreatedByStatefulCreatePages":false,"id":"85973ca2-64e7-5e54-acc6-f8d12d516372","slug":"","title":"maybe-ts"}}}